package my.download;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Headers;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;

/**
 * 
 * `okhttp`如何断开长连接呢? -未解决!
 * 
 * 
 * 
 * 1) http://img.hb.aicdn.com/778466793fd1fd8801ecb60e85801296c98b3844459bd-G41ZnT_fw658
 * -	* 上面是花瓣网的图片地址,使用chrome打开时,格式为"webp"(Content-Type: image/webp)
 * -	* 使用ie8打开,看不到(不知道在哪里看格式)格式,但是保存时显示的格式为"jpg"
 * -	* 我原来准备自己写个程序,通过URL.openConnection,然后用IO写到本地的,但是,
 * -	看到上面的根据浏览器的不同显示格式也不同的策略,决定使用框架来下载图片
 * 2) 突然意识到,上的格式之所以不同,可能和浏览器有关咯! 是因为我用浏览器访问的,所以才右上面的区别; 如果我直接下载,也许会不同.
 * 3) https://www.jianshu.com/p/f5320b1e0287
 * -	* 参考上面的使用教程使用okhttp
 * 
 * 4) http://blog.csdn.net/zhangteng22/article/details/52233126
 * -	* .addHeader("Connection", "close")
 * -	* 不论request还是response的header中包含了值为close的connection，都表明当前正在使用的tcp链接在请求处理完毕后会被断掉。
 * -	* 以后client再进行新的请求时就必须创建新的tcp链接了。
 * -	* HTTP Connection的 close设置允许客户端或服务器中任何一方关闭底层的连接双方都会要求在处理请求后关闭它们的TCP连接。
 * 
 * 
 * @see okhttp3.MediaType
 * @see okhttp3.RequestBody
 * @see okhttp3.OkHttpClient
 * @see okhttp3.Response
 * @see okhttp3.Headers
 * 
 * @author Wxg
 *
 */
public class DownloadImagesDemo {
	public static void main(String[] args) {
		String url = null;
		url = "http://img.hb.aicdn.com/778466793fd1fd8801ecb60e85801296c98b3844459bd-G41ZnT_fw658";
		
		new DownloadImagesDemo().download(url);
	}
	
	public void download(String url){
		Request req = new Request.Builder()
				.addHeader("Connection", "close")
				.url(url).build();
		
		req.header("");
		
		OkHttpClient client = new OkHttpClient();
		client.newCall(req).enqueue(new Callback() {
			@Override
			public void onResponse(Call call, Response response) throws IOException {
				if(response.isSuccessful()){
					downnloadFile(response);
				}
				call.cancel();
			}
			
			@Override
			public void onFailure(Call call, IOException e) {
				e.printStackTrace();
			}
		});
		
	}
	
	private void downnloadFile(Response resp) {
		Headers headers = resp.headers();
		for(String key : headers.names()){
			System.out.println( String.format("key: %s, val: %s", key, headers.get(key)) );
		}
		ResponseBody body = resp.body();
		body.close();
		resp.close();
	}
}
